package com.tvunetworks.center.user.util;


import java.util.*;
import java.util.Map.Entry;
/**
 * @program: tvucc-aggregator
 * @author lebronchen
 * @create: 2020-04-21 14:28
 **/
public class TimeMap {
    private static Map<String,Object> TIMEKEY = new HashMap<String,Object>();//time主属性 用于存放 需要保存的字段
    private static Map<String,Long> KEYTIME = new HashMap<String,Long>();//time主属性 用于存放 需要保存的字段

    private  static long EXPIRATIONTIME=10000;//测试用20秒
    private static final int START=0;//设置执行开始时间
    private static final int INTERVAL=5000;//设置间隔执行时间 单位/毫秒

    /**
     *
     * @param key key
     * @param vale vale
     */
    public static void put(String key,Object vale){
        TIMEKEY.put(key, vale);
        KEYTIME.put(key, new Date().getTime());
    }

    /**
     *
     * @param key key
     * @return static
     */
    public static Object get(String key){
        return TIMEKEY.get(key);
    }

    static{
        Timer tt=new Timer();//定时类
        tt.schedule(new TimerTask(){//创建一个定时任务
            @Override
            public void run() {
                long nd = new Date().getTime();//获取系统时间
                Iterator<Entry<String, Long>> entries = KEYTIME.entrySet().iterator();
                while (entries.hasNext()) {
                    Map.Entry<String,Object> entry = (Map.Entry) entries.next();
                    String key = (String)entry.getKey(); //获取key
                    long value = (Long)entry.getValue(); //获取value
                    long rt = nd - value;//获取当前时间跟存入时间的差值
                    if(rt>EXPIRATIONTIME){//判断时间是否已经过期  如果过期则清楚key 否则不做处理
                        TIMEKEY.put(key, null);
                        entries.remove();
//                        System.out.println("Key:"+key+" 已过期  清空");
                    }
                }
            }
        }, START,INTERVAL);//从0秒开始，每隔10秒执行一次
    }
}
